package com.example.recall_application.utils;

import android.annotation.SuppressLint;
import android.content.Context;
import androidx.appcompat.app.AppCompatActivity;

import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.telephony.TelephonyManager;

import java.util.Locale;

/**
 * 系统工具类
 * Created by zhuwentao on 2016-07-18.
 */
public class SystemUtils {

    public static int packageCode(Context context) {
        PackageManager manager = context.getPackageManager();
        int code = 0;
        try {
            PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
            code = info.versionCode;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return code;
    }

    /**
     * 获取当前手机系统语言。
     *
     * @return 返回当前系统语言。例如：当前设置的是“中文-中国”，则返回“zh-CN”
     */
    public static String getSystemLanguage() {
        return Locale.getDefault().getLanguage();
    }

    /**
     * 获取当前系统上的语言列表(Locale列表)
     *
     * @return  语言列表
     */
    public static Locale[] getSystemLanguageList() {
        return Locale.getAvailableLocales();
    }

    /**
     * 获取当前手机系统版本号
     *
     * @return  系统版本号
     */
    public static String getSystemVersion() {
        return android.os.Build.VERSION.RELEASE;
    }

    /**
     * 获取手机型号
     *
     * @return  手机型号
     */
    public static String getSystemModel() {
        return android.os.Build.MODEL;
    }

    /**
     * 获取手机厂商
     *
     * @return  手机厂商
     */
    public static String getDeviceBrand() {
        return android.os.Build.BRAND;
    }

    /**
     * 获取手机IMEI(需要“android.permission.READ_PHONE_STATE”权限)
     *
     * @return  手机IMEI
     */
    @SuppressLint("MissingPermission")
    public static String getIMEI(Context ctx) {
        TelephonyManager tm = (TelephonyManager) ctx.getSystemService(AppCompatActivity.TELEPHONY_SERVICE);
        if (tm != null) {
            return tm.getDeviceId();
        }
        return null;
    }
    public static String IDToKey(String pswkey1, String id) {
        int idlength = id.length();

        //	String test=pswk1.substring(0,1);

        int pswkey11 = Integer.valueOf(pswkey1.substring(0, 1));
        int pswkey12 = Integer.valueOf(pswkey1.substring(1, 2));
        int pswkey13 = Integer.valueOf(pswkey1.substring(2, 3));
        int pswkey14 = Integer.valueOf(pswkey1.substring(3, 4));
        int pswkey15 = Integer.valueOf(pswkey1.substring(4, 5));
        int pswkey16 = Integer.valueOf(pswkey1.substring(5, 6));
        //
        //
        String key0 = id.substring(idlength - pswkey11 - 1, idlength - pswkey11);
        String key1 = id.substring(idlength - pswkey12 - 1, idlength - pswkey12);
        String key2 = id.substring(idlength - pswkey13 - 1, idlength - pswkey13);
        String key3 = id.substring(idlength - pswkey14 - 1, idlength - pswkey14);
        String key4 = id.substring(idlength - pswkey15 - 1, idlength - pswkey15);
        String key5 = id.substring(idlength - pswkey16 - 1, idlength - pswkey16);
        //
        long d = AtoN(key0) * 63 * 63 * 63 * 63 * 63 + AtoN(key1) * 63 * 63 * 63 * 63 + AtoN(key2) * 63 * 63 * 63 + AtoN(key3) * 63 * 63 + AtoN(key4) * 63 + AtoN(key5);
        //
        long a = d % Long.valueOf(pswkey1);
        long b = d / Long.valueOf(pswkey1);
        //
        long a0 = a / (63 * 63);
        long ax = a % (63 * 63);
        long a1 = ax / 63;
        long a2 = ax % 63;

        long b0 = b / (63 * 63);
        long bx = b % (63 * 63);
        long b1 = bx / 63;
        long b2 = bx % 63;

        String a000 = NtoA(a0) + NtoA(a1) + NtoA(a2) + NtoA(b0) + NtoA(b1) + NtoA(b2);
        return (a000);
    }

    public static String NtoA(Long x) {
        if (x == 0) {
            return ("a");
        } else if (x == 1) {
            return ("b");
        } else if (x == 2) {
            return ("c");
        } else if (x == 3) {
            return ("d");
        } else if (x == 4) {
            return ("e");
        } else if (x == 5) {
            return ("f");
        } else if (x == 6) {
            return ("g");
        } else if (x == 7) {
            return ("h");
        } else if (x == 8) {
            return ("i");
        } else if (x == 9) {
            return ("j");
        } else if (x == 10) {
            return ("k");
        } else if (x == 11) {
            return ("l");
        } else if (x == 12) {
            return ("m");
        } else if (x == 13) {
            return ("n");
        } else if (x == 14) {
            return ("o");
        } else if (x == 15) {
            return ("p");
        } else if (x == 16) {
            return ("q");
        } else if (x == 17) {
            return ("r");
        } else if (x == 18) {
            return ("s");
        } else if (x == 19) {
            return ("t");
        } else if (x == 20) {
            return ("u");
        } else if (x == 21) {
            return ("v");
        } else if (x == 22) {
            return ("w");
        } else if (x == 23) {
            return ("x");
        } else if (x == 24) {
            return ("y");
        } else if (x == 25) {
            return ("z");
        } else if (x == 26) {
            return ("A");
        } else if (x == 27) {
            return ("B");
        } else if (x == 28) {
            return ("C");
        } else if (x == 29) {
            return ("D");
        } else if (x == 30) {
            return ("E");
        } else if (x == 31) {
            return ("F");
        } else if (x == 32) {
            return ("G");
        } else if (x == 33) {
            return ("H");
        } else if (x == 34) {
            return ("I");
        } else if (x == 35) {
            return ("J");
        } else if (x == 36) {
            return ("K");
        } else if (x == 37) {
            return ("L");
        } else if (x == 38) {
            return ("M");
        } else if (x == 39) {
            return ("N");
        } else if (x == 40) {
            return ("O");
        } else if (x == 41) {
            return ("P");
        } else if (x == 42) {
            return ("Q");
        } else if (x == 43) {
            return ("R");
        } else if (x == 44) {
            return ("S");
        } else if (x == 45) {
            return ("T");
        } else if (x == 46) {
            return ("U");
        } else if (x == 47) {
            return ("V");
        } else if (x == 48) {
            return ("W");
        } else if (x == 49) {
            return ("X");
        } else if (x == 50) {
            return ("Y");
        } else if (x == 51) {
            return ("Z");
        } else if (x == 52) {
            return ("0");
        } else if (x == 53) {
            return ("1");
        } else if (x == 54) {
            return ("2");
        } else if (x == 55) {
            return ("3");
        } else if (x == 56) {
            return ("4");
        } else if (x == 57) {
            return ("5");
        } else if (x == 58) {
            return ("6");
        } else if (x == 59) {
            return ("7");
        } else if (x == 60) {
            return ("8");
        } else if (x == 61) {
            return ("9");
        } else if (x == 62) {
            return ("-");
        } else if (x == 63) {
            return ("_");
        } else {
            return ("");
        }
    }

    public static long AtoN(String x) {
        if (x.equals("a")) {
            return 0;
        } else if (x.equals("b")) {
            return 1;
        } else if (x.equals("c")) {
            return 2;
        } else if (x.equals("d")) {
            return 3;
        } else if (x.equals("e")) {
            return 4;
        } else if (x.equals("f")) {
            return 5;
        } else if (x.equals("g")) {
            return 6;
        } else if (x.equals("h")) {
            return 7;
        } else if (x.equals("i")) {
            return 8;
        } else if (x.equals("j")) {
            return 9;
        } else if (x.equals("k")) {
            return 10;
        } else if (x.equals("l")) {
            return 11;
        } else if (x.equals("m")) {
            return 12;
        } else if (x.equals("n")) {
            return 13;
        } else if (x.equals("o")) {
            return 14;
        } else if (x.equals("p")) {
            return 15;
        } else if (x.equals("q")) {
            return 16;
        } else if (x.equals("r")) {
            return 17;
        } else if (x.equals("s")) {
            return 18;
        } else if (x.equals("t")) {
            return 19;
        } else if (x.equals("u")) {
            return 20;
        } else if (x.equals("v")) {
            return 21;
        } else if (x.equals("w")) {
            return 22;
        } else if (x.equals("x")) {
            return 23;
        } else if (x.equals("y")) {
            return 24;
        } else if (x.equals("z")) {
            return 25;
        } else if (x.equals("A")) {
            return 26;
        } else if (x.equals("B")) {
            return 27;
        } else if (x.equals("C")) {
            return 28;
        } else if (x.equals("D")) {
            return 29;
        } else if (x.equals("E")) {
            return 30;
        } else if (x.equals("F")) {
            return 31;
        } else if (x.equals("G")) {
            return 32;
        } else if (x.equals("H")) {
            return 33;
        } else if (x.equals("I")) {
            return 34;
        } else if (x.equals("J")) {
            return 35;
        } else if (x.equals("K")) {
            return 36;
        } else if (x.equals("L")) {
            return 37;
        } else if (x.equals("M")) {
            return 38;
        } else if (x.equals("N")) {
            return 39;
        } else if (x.equals("O")) {
            return 40;
        } else if (x.equals("P")) {
            return 41;
        } else if (x.equals("Q")) {
            return 42;
        } else if (x.equals("R")) {
            return 43;
        } else if (x.equals("S")) {
            return 44;
        } else if (x.equals("T")) {
            return 45;
        } else if (x.equals("U")) {
            return 46;
        } else if (x.equals("V")) {
            return 47;
        } else if (x.equals("W")) {
            return 48;
        } else if (x.equals("X")) {
            return 49;
        } else if (x.equals("Y")) {
            return 50;
        } else if (x.equals("Z")) {
            return 51;
        } else if (x.equals("0")) {
            return 52;
        } else if (x.equals("1")) {
            return 53;
        } else if (x.equals("2")) {
            return 54;
        } else if (x.equals("3")) {
            return 55;
        } else if (x.equals("4")) {
            return 56;
        } else if (x.equals("5")) {
            return 57;
        } else if (x.equals("6")) {
            return 58;
        } else if (x.equals("7")) {
            return 59;
        } else if (x.equals("8")) {
            return 60;
        } else if (x.equals("9")) {
            return 61;
        } else if (x.equals("-")) {
            return 62;
        } else if (x.equals("_")) {
            return 63;
        } else {
            return -1;
        }
    }
}
